/*
        Class administrator
*/

#ifndef ADMINISTRATOR_H
#define ADMINISTRATOR_H

#include "graph.hpp"
#include "graphFactory.hpp"
#include "searchAlgorithm.hpp"
#include "../logger/logger.hpp"


class Administrator {
private:
        Graph   graph;
        Logger  *logger;
        string  pathFound;
        string  roadPathFound;
        int     errorCode;
public:
        /**
         * Constructor por defecto de la clase Administrator.
         */
        Administrator();

        /**
         * Constructor parametrizado de la clase Administrator.
         */
        Administrator(std::string &fileToParseN, std::string &fileToParseE, Logger *logger);

        /**
         * Generador del contenido de la clase Administrator.
         */
        void create(std::string &fileToParseN, std::string &fileToParseE, Logger *logger);

		
		/**
         * Metodo que controla la ejecucion de la busqueda del camino optimo.
         */
        int searchPath(std::string originId, std::string destinyId, int priority);
    

		/**
         * Metodo que controla la ejecucion de la busqueda del camino optimo.
         */
        int searchPath(std::string originRoadName, int originRoadHeigh, std::string destinyRoadName, int destinyRoadHeigh , int priority);

		/**
         * Metodo para verificar la creacion del grafo.
         * @return true en caso de tener el grafo creado.
         * @return false en caso contrario.
         */
    bool isGraphCreated();

    /**
     * Metodo getter del camino optimo.
     * @return Retorna el camino optimo.
     */
        string getPath();

	/**
     * Metodo getter del camino optimo en formato nombre de calles.
     * @return Retorna el camino optimo.
     */

        string getRoadPath();

        /**
         * Metodo getter del codigo de error.
         * @return Retorna un entero indicando el codigo de error.
         */
        int getErrorCode();

        /**
         * Metodo getter del grafo.
         * @return Retorna el grafo.
         */
        Graph *getGraph();

        void cleanBestPathValues();

        /**
         * Destructor de la clase Administrator.
         */
        virtual ~Administrator();
};

#endif //ADMINISTRATOR_H